(function(){
    class Animal{
        name:string;
        age: number

        constructor(name: string, age: number){
            this.name = name;
            this.age = age;
        }

        sayHello(){
            console.log('动物在叫');
            
        }
        
    }

    /** 
     * - 此时，Animal称为父类，Dog称为子类
     * - 使用继承之后，子类将会拥有父类所有的属性和方法
     * - 通过继承可以将多个类中共有的代码写在一个父类中
     *      这样只需要写一次即可以让所有字类拥有父类中所有属性和方法
     * 
     * - 如果在子类中添加了父类相同的方法，则子类会覆盖父类的方法
    */
    class Dog extends Animal{
        run(){
            console.log(`${this.name}开始跑了`)
        }


        sayHello(): void {
            console.log(`${this.name}叫了`);
            
        }

    }


    class Cat extends Animal{

    }
    

    const dog = new Dog("阿里",4)
    const cat = new Cat("咪咪",4)

    dog.run()
    dog.sayHello()

    cat.sayHello()

    
})();